/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package be.hogent.designpatterns.billenkar;

import be.hogent.designpatterns.billenkar.states.InReparatieStatus;
import be.hogent.designpatterns.billenkar.states.InWinkelStatus;
import be.hogent.designpatterns.billenkar.states.Status;
import be.hogent.designpatterns.billenkar.states.VerhuurdStatus;

/**
 * 
 * @author Jeroen
 */
public abstract class Billenkar {

    private Status verhuurdStatus,inReparatieStatus,inWinkelStatus;
    private Status status;

    public Billenkar() {
        verhuurdStatus = new VerhuurdStatus(this);
        inReparatieStatus = new InReparatieStatus(this);
        inWinkelStatus = new InWinkelStatus(this);
        //een nieuwe billenkar wordt standaard in de winkel gezet!
        status = inWinkelStatus;
    }

    public void setStatus(Status status) {
        this.status = status;
    }

    public Status getStatus() {
        return status;
    }

    public void verhuur() {
        status.verhuurBillenkar();
    }

    public void zetInWinkel() {
        status.zetBillenkarInWinkel();
    }

    public void zetInReparatie() {
        status.repareerBillenkar();
    }

    /**
     * @return the verhuurdStatus
     */
    public Status getVerhuurdStatus()
    {
        return verhuurdStatus;
    }

    /**
     * @return the inReparatieStatus
     */
    public Status getInReparatieStatus()
    {
        return inReparatieStatus;
    }

    /**
     * @return the inWinkelStatus
     */
    public Status getInWinkelStatus()
    {
        return inWinkelStatus;
    }
    
    /**
    * @return De omschrijving van de billenkar.
    */
    public abstract String getOmschrijving();

    /**
     * @return De prijs van de billenkar.
     */
    public abstract double getPrijs();

}
